<!--
 * @LastEditors: 七七
 * @Date: 2023-01-10 16:47:57
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Object</title>
</head>

<body>
  <script>
    /**
     *  向对象中添加属性：
     * 
     *    1.对象.属性名 = 值
     * 
      *   2.对象["属性名"] = 值 //
      * 
      * []
      * 在[]中可以直接传递一个变量，变量的值会读取属性的值
      */

    // obj变量
    let obj = new Object();
    obj.age = 18;
    console.log(obj.age); //18 获取属性
    obj['name'] = 'Lucy';
    let nameObj = 'name';
    console.log(obj["name"]); //Lucy 获取属性
    console.log(obj[nameObj]); //Lucy 传递变量，变量的属性值寻找对象相对应的属性名，并获取其属性值
    console.log(obj[name]); //undefined

    /**
     *  in运算符
     *    - 通过该运算符可以检查一个对象中是否含有指定的属性
     *      如果有返回true，否则返回false
     *    - 语法："属性名" in 对象
     */

    console.log("test2" in obj); //false
    console.log("age" in obj); //true

    /**
     * JS的变量是保存在栈内存中的，
     *
     *    基本数据类型的值直接在栈内存中存储，值与值之间是独立存在的，修改是一个变量不会影响其他的变量
     *
     *    对象是保存在堆内存中的，每创建一个新的对象，就会在堆内存中开辟出一个新的空间，而变量保存的是对象的内存地址（对象的引用），如果两个变量保存的是同一个对象的引用，当一个通过变量修改属性时，另一个也会受到影响。如果某个对象值为null，不会影响其他对象。
     *
     * 当比较两个基本数据类型的值时，就是比较值
     * 当比较两个引用数据类型时，它是比较的对象的内存地址
     * 如果两个对象一模一样，但是内存地址不同，则返回false
     */

    //  对象字面量：语法：{属性名:属性值...}
  </script>
</body>

</html>